/**
 * 
 */
package com.taobao.api;

import com.taobao.api.model.ItemAddRequest;
import com.taobao.api.model.ItemAddResponse;
import com.taobao.api.model.ItemCatsGetRequest;
import com.taobao.api.model.ItemCatsResponse;
import com.taobao.api.model.ItemGetRequest;
import com.taobao.api.model.ItemGetResponse;
import com.taobao.api.model.ItemImgDeleteRequest;
import com.taobao.api.model.ItemImgDeleteResponse;
import com.taobao.api.model.ItemImgUploadRequest;
import com.taobao.api.model.ItemImgUploadResponse;
import com.taobao.api.model.ItemPropRequest;
import com.taobao.api.model.ItemPropResponse;
import com.taobao.api.model.ItemPropsRequest;
import com.taobao.api.model.ItemPropsResponse;
import com.taobao.api.model.ItemUpdateDelistingRequest;
import com.taobao.api.model.ItemUpdateDelistingResponse;
import com.taobao.api.model.ItemUpdateListingRequest;
import com.taobao.api.model.ItemUpdateListingResponse;
import com.taobao.api.model.ItemUpdateRequest;
import com.taobao.api.model.ItemUpdateResponse;
import com.taobao.api.model.ItemUpdateRevokeShowcaseRequest;
import com.taobao.api.model.ItemUpdateRevokeShowcaseResponse;
import com.taobao.api.model.ItemUpdateShowcaseRequest;
import com.taobao.api.model.ItemUpdateShowcaseResponse;
import com.taobao.api.model.ItemsGetResponse;
import com.taobao.api.model.ItemsInStockGetRequest;
import com.taobao.api.model.ItemsOnSaleGetRequest;
import com.taobao.api.model.PostagesGetRequest;
import com.taobao.api.model.PostagesGetResponse;
import com.taobao.api.model.PropImgDeleteRequest;
import com.taobao.api.model.PropImgDeleteResponse;
import com.taobao.api.model.PropimgUploadRequest;
import com.taobao.api.model.PropimgUploadResponse;
import com.taobao.api.model.ShippingsSendGetRequest;
import com.taobao.api.model.ShippingsSendGetResponse;
import com.taobao.api.model.ShopGetRequest;
import com.taobao.api.model.ShopGetResponse;
import com.taobao.api.model.ShopShowcaseRemainCountRequest;
import com.taobao.api.model.ShopShowcaseRemainCountResponse;
import com.taobao.api.model.ShopUpdateRequest;
import com.taobao.api.model.ShopUpdateResponse;
import com.taobao.api.model.SkuAddRequest;
import com.taobao.api.model.SkuAddResponse;
import com.taobao.api.model.SkuUpdateRequest;
import com.taobao.api.model.SkuUpdateResponse;
import com.taobao.api.model.TradeGetRequest;
import com.taobao.api.model.TradeGetResponse;
import com.taobao.api.model.TradeRateAddRequest;
import com.taobao.api.model.TradeRateAddResponse;
import com.taobao.api.model.TradeRatesGetRequest;
import com.taobao.api.model.TradeRatesGetResponse;
import com.taobao.api.model.TradesBoughtGetRequest;
import com.taobao.api.model.TradesGetResponse;
import com.taobao.api.model.TradesSoldGetRequest;
import com.taobao.api.model.UserGetRequest;
import com.taobao.api.model.UserGetResponse;

/**
 * 隐私数据接口
 * 
 * 此接口中包括TopClient中所有的客户端API 每个API被调用后均返回一个Response结果，此结果中包括：错误码 code，错误信息
 * msg，重定向URL redirectUrl， 以及Http请求返回的结果的body部分 ，另包括调用这个API成功时返回的真实结果
 * 
 * @version 2008-8-28
 * @author <a href="mailto:zixue@taobao.com">zixue</a>
 * 
 */
public interface TaobaoPrivateApi {

	/**
	 * 此接口方法用以添加一个商品信息. apiType=2， 部分服务调用，需要签名校验和用户绑定,需要传入sessionid
	 * 
	 * @param itemAddRequest
	 * @param sessionId
	 * @return ItemAddResponse iid 商品id ; created 修改时间
	 * @throws TaobaoApiException
	 */
	public ItemAddResponse itemAdd(ItemAddRequest itemAddRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法用以得到单个商品信息的公开信息和隐私信息。
	 * 
	 * @param itemGetRequest
	 * @return ItemGetResponse 包括Item
	 * @throws TaobaoApiException
	 */
	public ItemGetResponse itemGet(ItemGetRequest itemGetRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法用以更新商品信息.apiType=2， 部分服务调用，需要签名校验和用户绑定, 需要传入sessionid
	 * 
	 * @param itemUpdateRequest
	 * @param sessionId
	 * @return ItemUpdateResponse iid 商品;id modified 修改时间
	 * @throws TaobaoApiException
	 */
	public ItemUpdateResponse itemUpdate(ItemUpdateRequest itemUpdateRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法以实现得到当前会话用户（必须为卖家）的出售中商品列表.支持分页.apiType=2， 部分服务调用，需要签名校验和用户绑定.
	 * 需要传入sessionid
	 * 
	 * @param itemsOnSaleGetRequest
	 * @param sessionId
	 * @return ItemsGetResponse 返回搜索到的商品列表 List<Item> , 不包括desc字段
	 * @throws TaobaoApiException
	 */
	public ItemsGetResponse itemsOnSaleGet(
			ItemsOnSaleGetRequest itemsOnSaleGetRequest, String sessionId)
			throws TaobaoApiException;

	/**
	 * 此接口方法用以搜索当前会话用户（必须为卖家）的库存商品,支持分页.apiType=2， 部分服务调用，需要签名校验和用户绑定.
	 * 需要传入sessionid
	 * 
	 * @param itemsInStockGetRequest
	 * @param sessionId
	 * @return ItemsGetResponse 返回搜索到的商品列表 List<Item> , 不包括desc字段
	 * @throws TaobaoApiException
	 * 
	 */
	public ItemsGetResponse itemsInStockGet(
			ItemsInStockGetRequest itemsInStockGetRequest, String sessionId)
			throws TaobaoApiException;

	/**
	 * 此接口方法用以搜索当前会话用户做为买家达成的交易记录.支持分页.apiType=2， 部分服务调用，需要签名校验和用户绑定.
	 * 
	 * @param tradesRequest
	 * @param sessionId
	 * @return
	 * @throws TaobaoApiException
	 */
	public TradesGetResponse tradesBoughtGet(
			TradesBoughtGetRequest tradesRequest, String sessionId)
			throws TaobaoApiException;

	/**
	 * 此接口方法用以搜索当前会话用户（做为卖家）已卖出的交易数据.支持分页.apiType=2， 部分服务调用，需要签名校验和用户绑定.
	 * 
	 * @param tradesRequest
	 * @param sessionId
	 * @return
	 * @throws TaobaoApiException
	 */
	public TradesGetResponse tradesSoldGet(TradesSoldGetRequest tradesRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法以实现得到单个用户资料的公开信息和隐私信息。
	 * 
	 * @param userGetRequest
	 * @param sessionId
	 * @return
	 * @throws TaobaoApiException
	 */
	public UserGetResponse userGet(UserGetRequest userGetRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法以实现得到后台供卖家发布商品的标准商品类目.apiType=2， 部分服务调用，需要签名校验和用户绑定.
	 * 
	 * @param itemCatsGetRequest
	 * @param sessionId
	 * @return
	 * @throws TaobaoApiException
	 */
	public ItemCatsResponse itemCatsGet(ItemCatsGetRequest itemCatsGetRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法以实现得到后台供卖家发布商品用的单个商品属性.apiType=2， 部分服务调用，需要签名校验和用户绑定
	 * 
	 * @param itemPropGetRequest
	 * @param sessionId
	 * @return
	 * @throws TaobaoApiException
	 */
	public ItemPropResponse itemPropGet(ItemPropRequest itemPropGetRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法以实现得到后台供卖家发布商品用的商品标准属性和属性值列表.apiType=2， 部分服务调用，需要签名校验和用户绑定
	 * 
	 * @param itemPropsGetRequest
	 * @param sessionId
	 * @return
	 * @throws TaobaoApiException
	 */
	public ItemPropsResponse itemPropsGet(ItemPropsRequest itemPropsGetRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法用以批量查询卖家的物流订单,支持分页. apiType=2， 需要签名校验和用户绑定,需要传入sessionid
	 * 
	 * @param shippingsSendGetRequest
	 * @param sessionId
	 * @return ShippingsSendGetResponse shipping物流订单详情列表
	 * @throws TaobaoApiException
	 */
	public ShippingsSendGetResponse shippingsSendGet(
			ShippingsSendGetRequest shippingsSendGetRequest, String sessionId)
			throws TaobaoApiException;

	/**
	 * 此接口方法用以查询店铺的公开信息。
	 * 
	 * @param shopGetRequest
	 * @return ShopGetResponse shop店铺对象列表
	 * @throws TaobaoApiException
	 */
	public ShopGetResponse shopGet(ShopGetRequest shopGetRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法用以修改店铺信息. apiType=3， 需要签名校验和用户绑定，需要传入sessionid
	 * 
	 * @param shopUpdateRequest
	 * @param sessionId
	 * @return ShopUpdateResponse 更新的shop店铺对象，包括：sid店铺id，modified修改时间
	 * @throws TaobaoApiException
	 */
	public ShopUpdateResponse shopUpdate(ShopUpdateRequest shopUpdateRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法用以查询店铺剩余橱窗个数. apiType=2, 需要签名校验和用户绑定，需要传入sessionid
	 * 
	 * @param shopShowcaseRemainCountRequest
	 * @param sessionId
	 * @return shopShowcaseRemainCountResponse remainShowcase剩余橱窗数
	 * @throws TaobaoApiException
	 */
	public ShopShowcaseRemainCountResponse shopShowcaseRemainCount(
			ShopShowcaseRemainCountRequest shopShowcaseRemainCountRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法用以查询卖家的交易评价列表,支持分页. apiType=1， 需要签名校验和用户绑定,需要传入sessionid
	 * 
	 * @param tradeRatesGetRequest
	 * @param sessionId
	 * @return TradeRatesGetResponse tradeRates评价信息列表
	 * @throws TaobaoApiException
	 */
	public TradeRatesGetResponse tradeRatesGet(
			TradeRatesGetRequest tradeRatesGetRequest, String sessionId)
			throws TaobaoApiException;

	/**
	 * 此接口方法用以增加交易评价. apiType=3， 需要签名校验和用户绑定，需要传入sessionid
	 * 
	 * @param tradeRateAddRequest
	 * @param sessionId
	 * @return TradeRateAddResponse tid交易id，created评价时间
	 * @throws TaobaoApiException
	 */
	public TradeRateAddResponse tradeRateAdd(
			TradeRateAddRequest tradeRateAddRequest, String sessionId)
			throws TaobaoApiException;

	/**
	 * 此接口方法用以让商品上架.apiType=2， 部分服务调用，需要签名校验和用户绑定, 需要传入sessionid
	 * 
	 * @param itemUpdateListingRequest
	 * @param sessionId
	 * @return ItemUpdateListingResponse iid 商品id, modified 修改时间
	 * @throws TaobaoApiException
	 */
	public ItemUpdateListingResponse itemUpdateListing(
			ItemUpdateListingRequest itemUpdateListingRequest, String sessionId)
			throws TaobaoApiException;

	/**
	 * 此接口方法用以让商品下架.apiType=2， 部分服务调用，需要签名校验和用户绑定, 需要传入sessionid
	 * 
	 * @param itemUpdateDelistingRequest
	 * @param sessionId
	 * @return ItemUpdateDelistingResponse iid 商品id, modified 修改时间
	 * @throws TaobaoApiException
	 */
	public ItemUpdateDelistingResponse itemUpdateDelisting(
			ItemUpdateDelistingRequest itemUpdateDelistingRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法用以修改商品橱窗推荐状态让商品被推荐.apiType=2， 部分服务调用，需要签名校验和用户绑定, 需要传入sessionid
	 * 
	 * @param itemUpdateShowcaseRequest
	 * @param sessionId
	 * @return ItemUpdateShowcaseResponse iid 商品id, modified 修改时间
	 * @throws TaobaoApiException
	 */
	public ItemUpdateShowcaseResponse itemUpdateShowcase(
			ItemUpdateShowcaseRequest itemUpdateShowcaseRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法用以修改商品橱窗推荐状态让商品不被推荐.apiType=2， 部分服务调用，需要签名校验和用户绑定, 需要传入sessionid
	 * 
	 * @param itemUpdateRevokeShowcaseRequest
	 * @param sessionId
	 * @return ItemUpdateRevokeShowcaseResponse iid 商品id, modified 修改时间
	 * @throws TaobaoApiException
	 */
	public ItemUpdateRevokeShowcaseResponse itemUpdateRevokeShowcase(
			ItemUpdateRevokeShowcaseRequest itemUpdateRevokeShowcaseRequest,
			String sessionId) throws TaobaoApiException;

	/**
	 * 此接口方法用以得到单条交易信息的公开信息和隐私信息.apiType=3，部分服务调用，需要签名校验和用户绑定，需要传入sessionid
	 * 
	 * @param tradeGetRequest
	 * @param sessionId
	 * @return TradeGetResponse trade交易信息
	 * @throws TaobaoApiException
	 */
	public TradeGetResponse tradeGet(TradeGetRequest tradeGetRequest,
			String sessionId) throws TaobaoApiException;


	/**
	 * 
	 * 此接口用以得到卖家的运费模板. apiType=2,部分服务调用,需要签名校验和用户绑定,需要传入sessionid
	 * 
	 * @param postageGetRequest
	 * @param sessionId
	 * @return PostageGetResponse
	 * @throws TaobaoApiException
	 */
	public PostagesGetResponse postagesGet(
			PostagesGetRequest postageGetRequest, String sessionId)
			throws TaobaoApiException;


	/**
	 * 此接口用于添加SKU apiType=2
	 * 
	 * @param skuAddRequest
	 * @param sessionId
	 * @return iid 商品的id ,create 创建时间
	 * @throws TaobaoApiException
	 */
	public SkuAddResponse skuAdd(SkuAddRequest skuAddRequest, String sessionId)
			throws TaobaoApiException;

	/**
	 * 此接口用于修改SKU信息 apiType=2
	 * 
	 * @param skuAddRequest
	 * @param sessionId
	 * @return iid 商品id,nick 商品所属用户的昵称,modified sku的修改时间
	 * @throws TaobaoApiException
	 */
	public SkuUpdateResponse skuUpdate(SkuUpdateRequest skuUpdateRequest,
			String sessionId) throws TaobaoApiException;



	
	/**
	 * 添加商品图片 apiType=2
	 * @param itemImgUploadRequest
	 * @return ItemImgUploadResponse
	 * @throws TaobaoApiException
	 */
	public ItemImgUploadResponse itemImgUpload(ItemImgUploadRequest itemImgUploadRequest,String sessionId) throws TaobaoApiException;
	
	
	/**
	 * 删除商品图片 apiType=2
	 * @param itemImgDeleteRequest
	 * @param sessionId
	 * @return ItemImgDeleteResponse
	 * @throws TaobaoApiException
	 */
	public ItemImgDeleteResponse itemImgDelete(ItemImgDeleteRequest itemImgDeleteRequest,String sessionId) throws TaobaoApiException;
	
	
	/**
	 * 添加属性图片
	 * @param propimgUploadRequest
	 * @param sessionId
	 * @return PropimgUploadResponse
	 * @throws TaobaoApiException
	 */
	public PropimgUploadResponse propImgUpload(PropimgUploadRequest propimgUploadRequest,String sessionId) throws TaobaoApiException;
	
	
	/**
	 * 删除属性图片
	 * @param propImgDeleteRequest
	 * @param sessionId
	 * @return PropImgDeleteResponse
	 * @throws TaobaoApiException
	 */
	public PropImgDeleteResponse propImgDelete(PropImgDeleteRequest propImgDeleteRequest,String sessionId) throws TaobaoApiException;
}
